package com.adlotto2.lcdns.cronos.http;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import android.content.Context;
import android.util.Log;

public class CNLottoAdApiSetEx {
	protected static CNLottoAdApiSetEx sApiSetEx = null;

	public static CNLottoAdApiSetEx getInstance() {
		if (sApiSetEx == null) {
			synchronized (CNLottoAdApiSetEx.class) {
				if (sApiSetEx == null) {
					sApiSetEx = new CNLottoAdApiSetEx();
				}
			}
		}

		return sApiSetEx;
	}

	public boolean isLive() {
		return CNLottoAdApiSet.isLive();
	}

	public void setIsLive(boolean isLive) {
		CNLottoAdApiSet.setIsLive(isLive);
	}

	@SuppressWarnings("unused")
	private boolean isValidString(String str) {
		return (str != null) && (str.length() > 0);
	}

	private String encodeUrl(String value) {
		try {
			/*####### Ben ########*/
			// 기존 서버는 euc-kr로 작동하지만 테스트 서버는 utf-8로 인코딩 해야함.
			/*if(CNLottoAdApiSet.sIsLive) {
				return URLEncoder.encode(value, "euc-kr");
			} else {
				return URLEncoder.encode(value, "utf-8");
			}*/
			return URLEncoder.encode(value, "utf-8");
		} 
		catch (UnsupportedEncodingException localUnsupportedEncodingException) {
		}

		return value;
	}
	
	private String encodeUrlWithOption(String value, String option) {
		try {
			return URLEncoder.encode(value, option);
		} catch(UnsupportedEncodingException localUnsupportedEncodingException) {
			localUnsupportedEncodingException.printStackTrace();
		}
		return value;
	}

	public String getTestUrl(Context context, String optionalSearchWord) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 31, sBuilder);
		sBuilder.append("&dong=").append(encodeUrl(optionalSearchWord));

		return sBuilder.toString();
	}
	
	/**
	 * 주소 시,도 요청 URL
	 * @param context
	 * @return
	 */
	public String getSidoListUrl(Context context) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 1, sBuilder);

		return sBuilder.toString();
	}
	
	/**
	 * 주소 구,군 요청 URL
	 * @param context
	 * @param sido : 시,도
	 * @return
	 */
	public String getGugunListUrl(Context context, String sido) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 2, sBuilder);
		sBuilder.append("&sido=").append(encodeUrl(sido));

		return sBuilder.toString();
	}
	
	/**
	 * 주소 읍,면,동 요청 URL
	 * @param context
	 * @param sido : 시,도
	 * @param gugun : 구,군
	 * @return
	 */
	public String getDongListUrl(Context context,String sido, String gugun) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 3, sBuilder);
		sBuilder.append("&sido=").append(encodeUrl(sido));
		sBuilder.append("&gugun=").append(encodeUrl(gugun));

		return sBuilder.toString();
	}
	
	/*####### Ben ########*/
	// 회원등록시 추천인 아이디 추가함.
	/**
	 * 회원 등록 URL
	 * @param context
	 * @param mem_age : 나이대
	 * @param mem_sex : 성별
	 * @param sido : 시,도
	 * @param gugun : 구,군
	 * @param dong : 읍,면,동
	 * @param mem_phone : 전화번호
	 * @param career : 직업
	 * @param interest : 관심분야
	 * @param pushToken : 푸쉬토큰
	 * @param recommender : 추천인 아이디
	 * @return
	 */
	public String setMemberUrl(Context context,int mem_age, String mem_sex, String sido, String gugun, String dong, String mem_phone, int career, String interest,  String pushToken, String recommender) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 4, sBuilder);
		sBuilder.append("&memAge=").append(String.valueOf(mem_age));
		sBuilder.append("&memSex=").append(mem_sex);
		sBuilder.append("&sido=").append(encodeUrl(sido));
		sBuilder.append("&gugun=").append(encodeUrl(gugun));
		sBuilder.append("&dong=").append(encodeUrl(dong));
		sBuilder.append("&memPhone=").append(mem_phone);
		sBuilder.append("&careerSeq=").append(String.valueOf(career));
		sBuilder.append("&interestSeq=").append(interest);
		sBuilder.append("&pushToken=").append(pushToken);
		if(recommender != null && recommender.length() != 0) {
			sBuilder.append("&managerId=").append(recommender);
		}
		

		return sBuilder.toString();
	}
	
	
	/**
	 * 광고신청 요청 URL
	 * @param context
	 * @param companyName : 광고 신청업체 상호
	 * @param ceoName : 대표자 이름
	 * @param phoneNum : 광고 신청업체 전화번호
	 * @param requestManager : 사내 담당자
	 * @param sido : 시, 도
	 * @param gugun : 구, 군
	 * @param dong : 동
	 * @param reqType : 1(로또기반)  2(위치기반)
	 * @param businessKind : 업종코드
	 * @return
	 */
	public String setRequestAdUrl(Context context, String companyName, String ceoName, String phoneNum, String requestManager, String sido, String gugun, String dong, int reqType, String businessKind) {
		StringBuilder sBuilder = new StringBuilder();
		
		CNLottoAdApiSet.getURL(context, 1000, sBuilder);
		/*sBuilder.append("&req_company=").append(encodeUrl(companyName));
		sBuilder.append("&req_ceo=").append(encodeUrl(ceoName));
		sBuilder.append("&req_tel=").append(encodeUrl(phoneNum));
		sBuilder.append("&req_manager=").append(encodeUrl(requestManager));
		sBuilder.append("&sido=").append(encodeUrl(sido));
		sBuilder.append("&gugun=").append(encodeUrl(gugun));
		sBuilder.append("&dong=").append(encodeUrl(dong));
		sBuilder.append("&req_type=").append(String.valueOf(reqType));*/
		
		sBuilder.append("&req_company=").append(encodeUrlWithOption(companyName, "utf-8"));
		sBuilder.append("&req_ceo=").append(encodeUrlWithOption(ceoName, "utf-8"));
		sBuilder.append("&req_tel=").append(encodeUrlWithOption(phoneNum, "utf-8"));
		sBuilder.append("&req_manager=").append(encodeUrlWithOption(requestManager, "utf-8"));
		sBuilder.append("&sido=").append(encodeUrlWithOption(sido, "utf-8"));
		sBuilder.append("&gugun=").append(encodeUrlWithOption(gugun, "utf-8"));
		sBuilder.append("&dong=").append(encodeUrlWithOption(dong, "utf-8"));
		sBuilder.append("&req_type=").append(String.valueOf(reqType));
		sBuilder.append("&business_kind=").append(businessKind);
		
		
		return sBuilder.toString();
	}
	
	
	
	/**
	 * 이체 신청 URL
	 * @param context
	 * @param accountName : 예금주
	 * @param bankName : 은행명
	 * @param accountNumber : 계좌번호
	 * @param memPhone : 전화번호
	 * @param askMoney : 신청금액
	 * @return
	 */
	public String setTransferUrl(Context context, String accountName, String bankName, String accountNumber, String memPhone , int askMoney) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 5, sBuilder);
		sBuilder.append("&accountName=").append(encodeUrl(accountName));
		sBuilder.append("&bankName=").append(encodeUrl(bankName));
		sBuilder.append("&accountNumber=").append(accountNumber);
		sBuilder.append("&memPhone=").append(memPhone);
		sBuilder.append("&askMoney=").append(String.valueOf(askMoney));

		return sBuilder.toString();
	}
	
	/**
	 * 공지사항 요청 URL
	 * @param context
	 * @param page : 요청 페이지
	 * @param pageSize : 요청 페이지 사이즈
	 * @return
	 */
	public String getNotifyListUrl(Context context, int page, int pageSize) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 6, sBuilder);
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pageSize=").append(String.valueOf(pageSize));

		return sBuilder.toString();
	}
	
	/**
	 * FaQ 요청 URL
	 * @param context
	 * @param page : 요청 페이지
	 * @param pageSize : 요청 페이지 사이즈
	 * @return
	 */
	public String getFaqListUrl(Context context, int page, int pageSize) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 7, sBuilder);
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pageSize=").append(String.valueOf(pageSize));

		return sBuilder.toString();
	}
	
	/**
	 * 제휴 회사 요청 URL
	 * @param context
	 * @param page : 요청 페이지
	 * @param pageSize : 요청 페이지 사이즈
	 * @return
	 */
	public String getPartnerListUrl(Context context, int page, int pageSize) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 8, sBuilder);
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pageSize=").append(String.valueOf(pageSize));

		return sBuilder.toString();
	}
	
	/**
	 * 당첨현황 회사 요청 URL
	 * @param context
	 * @param page : 요청 페이지
	 * @param pageSize : 요청 페이지 사이즈
	 * @return
	 */
	public String getWinnerListUrl(Context context, int page, int pageSize) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 9, sBuilder);
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pageSize=").append(String.valueOf(pageSize));

		return sBuilder.toString();
	}
	
	/**
	 * 회원 가입 여부 체크 URL
	 * @param context
	 * @param phoneNum : 회원 전화번호
	 * @param pushToken : 토큰
	 * @return
	 */
	public String checkMemberUrl(Context context, String phoneNum, String pushToken) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 10, sBuilder);
		sBuilder.append("&memPhone=").append(phoneNum);
		sBuilder.append("&pushToken=").append(pushToken);

		return sBuilder.toString();
	}
	
	/**
	 * 로또 목록 요청 URL
	 * @param context
	 * @param memPhone : 전화번호
	 * @param page : 요청 페이지
	 * @param pageSize : 요청 사이즈(페이지별 갯수)
	 * @return
	 */
	public String getLottoListUrl(Context context, String memPhone, int page, int pageSize) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 14, sBuilder);
		sBuilder.append("&memPhone=").append(memPhone);
		
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pageSize=").append(String.valueOf(pageSize));

		return sBuilder.toString();
	}
	
	/**
	 * 로또 요청 URL
	 * @param context
	 * @param sendSeq
	 * @return
	 */
	public String getLottoUrl(Context context, String sendSeq) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 11, sBuilder);
		sBuilder.append("&sendSeq=").append(sendSeq);

		return sBuilder.toString();
	}
	
	/**
	 * 로또 저장 URL
	 * @param context
	 * @param sendSeq : 광고 Frame Seq
	 * @return
	 */
	public String setLottoUrl(Context context, String sendSeq) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 12, sBuilder);
		sBuilder.append("&sendSeq=").append(sendSeq);

		return sBuilder.toString();
	}
	
	/**
	 * 광고 목록 요청 URL
	 * @param context
	 * @param searchValue : 검색 단어
	 * @param page : 페이지 
	 * @param pageSize : 페이지사이즈
	 * @param searchType : A:상호 B:업종 C:지역 (optional)
	 * @param searchValue : 검색어(searchType이 상호인 경우 상호명) (optional)
	 * @param sido : 지역검색 시도 (optional)
	 * @param gugun : 지역검색 구군 (optional)
	 * @param dong : 지역검색 동 (optional)
	 * @return
	 */
	public String getAdAllUrl(Context context, int page, int pageSize, String memPhone, String searchType, String searchValue, String sido, String gugun, String dong) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 13, sBuilder);
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pageSize=").append(String.valueOf(pageSize));
		
		if(searchValue != null) sBuilder.append("&searchValue=").append(searchValue);
		if(searchType != null) {
			sBuilder.append("&searchType=").append(searchType);
			
			if(searchType.equals("C") && sido != null && gugun != null && dong != null) {
				sBuilder.append("&sido=").append(encodeUrl(sido));
				sBuilder.append("&gugun=").append(encodeUrl(gugun));
				sBuilder.append("&dong=").append(encodeUrl(dong));
			}
		}

		return sBuilder.toString();
	}
	
	/**
	 * 가입 당시 위치기반 광고 목록 요청 URL
	 * @param context
	 * @param page : 페이지 
	 * @param pageSize : 페이지사이즈
	 * @param memPhone : 멤버 전화번호
	 */
	public String getMyListUrl(Context context, int page, int pageSize, String memPhone) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, CNLottoAdApiSet.MSG_MY_AD_LIST, sBuilder); 
		
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pagesize=").append(String.valueOf(pageSize));
		sBuilder.append("&mem_phone=").append(memPhone);
		
		return sBuilder.toString();
	}
	
	/**
	 * 수신광고 목록 요청 URL
	 * @param context (required)
	 * @param page : 페이지 (required)
	 * @param pageSize : 페이지사이즈 (required)
	 * @param searchType : A:상호 B:업종 C:지역 (optional)
	 * @param searchValue : 검색어(searchType이 상호인 경우 상호명) (optional)
	 * @param sido : 지역검색 시도 (optional)
	 * @param gugun : 지역검색 구군 (optional)
	 * @param dong : 지역검색 동 (optional)
	 * @return
	 */
	public String getAdRecUrl(Context context, int page, int pageSize, String memPhone, String searchType, String searchValue, String sido, String gugun, String dong) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 15, sBuilder);
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pageSize=").append(String.valueOf(pageSize));
		sBuilder.append("&memPhone=").append(memPhone);
		
		if(searchValue != null) sBuilder.append("&searchValue=").append(searchValue);
		if(searchType != null) {
			sBuilder.append("&searchType=").append(searchType);
			
			if(searchType.equals("C") && sido != null && gugun != null && dong != null) {
				sBuilder.append("&sido=").append(sido);
				sBuilder.append("&gugun=").append(gugun);
				sBuilder.append("&dong=").append(dong);
			}
		}

		return sBuilder.toString();
	}
	
	/**
	 * 
	 * @param context
	 * @param context
	 * @param page : 페이지 
	 * @param pageSize : 페이지사이즈
	 * @return
	 */
	public String getMyPageUrl(Context context, String memPhone, int page) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 16, sBuilder);
		sBuilder.append("&memPhone=").append(memPhone);
		sBuilder.append("&page=").append(String.valueOf(page));
		sBuilder.append("&pageSize=").append("100");

		return sBuilder.toString();
	}
	
	/**
	 * 
	 * @param context
	 * @param context
	 * @param page : 페이지 
	 * @param pageSize : 페이지사이즈
	 * @return
	 */
	public String getTransferListUrl(Context context, String memPhone, int page) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 17, sBuilder);
		sBuilder.append("&memPhone=").append(memPhone);
		sBuilder.append("&page=").append(String.valueOf(page));

		return sBuilder.toString();
	}
	
	/**
	 * 전화걸기 유,무 셋팅 URL
	 * @param context
	 * @param adSeq : 광고 시퀀스	
	 * @param memPhone : 전화번호
	 * @return
	 */
	public String setCallUrl(Context context, int adSeq, String memPhone) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 20, sBuilder);
		sBuilder.append("&adSeq=").append(String.valueOf(adSeq));
		sBuilder.append("&memPhone=").append(memPhone);

		return sBuilder.toString();
	}
	
	public String setJoinPushUrl(Context context, String memPhone) {
		StringBuilder sBuilder = new StringBuilder();
		CNLottoAdApiSet.getURL(context, 30, sBuilder);
		sBuilder.append("&memPhone=").append(memPhone);

		return sBuilder.toString();
	}
}